package com.polaris.live.net.service

import com.polaris.live.common.AppModule
import com.polaris.live.common.constant.AppConst
import com.polaris.live.common.network.ApiResponse
import com.polaris.live.common.resp.ConfigPostResp
import com.polaris.live.common.resp.ConfigPreResp
import com.polaris.live.common.resp.UserResp
import com.polaris.live.common.resp.VersionResp
import com.polaris.live.im.sfs.bean.live.ext.UserBasicVo
import com.polaris.live.im.sfs.bean.pusher.UserState
import com.polaris.live.resp.back_resp.AgencyMemberIndicatorResp
import com.polaris.live.resp.back_resp.BackpackReceivesResp
import com.polaris.live.resp.back_resp.CallPriceResp
import com.polaris.live.resp.back_resp.CoinBeansResp
import com.polaris.live.resp.back_resp.CustomerMessageUnreadResp
import com.polaris.live.resp.back_resp.DiamondResp
import com.polaris.live.resp.back_resp.InfoOtherResp
import com.polaris.live.resp.back_resp.IpCountryResp
import com.polaris.live.resp.back_resp.IsRegisteredResp
import com.polaris.live.resp.back_resp.ListResultUserInviteGuestResp
import com.polaris.live.resp.back_resp.ListResultUserInviteRewardResp
import com.polaris.live.resp.back_resp.RandomNameResp
import com.polaris.live.resp.back_resp.Rank
import com.polaris.live.resp.back_resp.RichCharmBean
import com.polaris.live.resp.back_resp.ThirdBindResp
import com.polaris.live.resp.back_resp.UploadUrlResp
import com.polaris.live.resp.back_resp.UseConsumableResp
import com.polaris.live.resp.back_resp.UserBackpackBarrageNumberResp
import com.polaris.live.resp.back_resp.UserBackpackConsumableResp
import com.polaris.live.resp.back_resp.UserBackpackDecorationResp
import com.polaris.live.resp.back_resp.UserBackpackGiftResp
import com.polaris.live.resp.back_resp.UserBackpackNewAllResp
import com.polaris.live.resp.back_resp.UserBackpackNumberResp
import com.polaris.live.resp.back_resp.UserBackpackResp
import com.polaris.live.resp.back_resp.UserBackpackToolListResp
import com.polaris.live.resp.back_resp.UserBanOptionsResp
import com.polaris.live.resp.back_resp.UserConsumableGiveVo
import com.polaris.live.resp.back_resp.UserConsumableRewardV2Resp
import com.polaris.live.resp.back_resp.UserContributionRank
import com.polaris.live.resp.back_resp.UserCoverResp
import com.polaris.live.resp.back_resp.UserCustomerServiceResp
import com.polaris.live.resp.back_resp.UserFreeGiftResp
import com.polaris.live.resp.back_resp.UserInviteHostListResp
import com.polaris.live.resp.back_resp.UserInviteResp
import com.polaris.live.resp.back_resp.UserInviterCodeResp
import com.polaris.live.resp.back_resp.UserLikesVo
import com.polaris.live.resp.back_resp.UserMedalAllResp
import com.polaris.live.resp.back_resp.UserMuteOptionsResp
import com.polaris.live.resp.back_resp.UserPartyBackgroundListResp
import com.polaris.live.resp.back_resp.UserPartyGameTaskResp
import com.polaris.live.resp.back_resp.UserRatingIndicatorVo
import com.polaris.live.resp.back_resp.UserRichCharmConfigsResp
import com.polaris.live.resp.back_resp.UserRoomThemeListResp
import com.polaris.live.resp.back_resp.UserScorePartyGameResp
import com.polaris.live.resp.back_resp.UserTaskListResp
import com.polaris.live.resp.back_resp.UserTaskListV2Resp
import com.polaris.live.resp.back_resp.UserTaskReceiveRewardResp
import com.polaris.live.resp.back_resp.UserTrafficSourceResp
import com.polaris.live.resp.back_resp.UserVipCenterResp
import com.polaris.live.resp.back_resp.UserVipDetailResp
import com.polaris.live.resp.back_resp.VerifyResp
import com.polaris.live.resp.base.ListResp
import com.polaris.live.resp.bean.UserRankVo
import com.polaris.live.resp.go_resp.AppealBean
import com.polaris.live.resp.go_resp.BackPackRedRequest
import com.polaris.live.resp.go_resp.BuyBackgroundRequest
import com.polaris.live.resp.go_resp.ChatPriceBean
import com.polaris.live.resp.go_resp.ComplaintBean
import com.polaris.live.resp.go_resp.FcmNoticeTokenBean
import com.polaris.live.resp.go_resp.FeedbackBean
import com.polaris.live.resp.go_resp.InfoModifyBean
import com.polaris.live.resp.go_resp.JoinInviteAgencyBean
import com.polaris.live.resp.go_resp.LoginPhoneBean
import com.polaris.live.resp.go_resp.ManagerBanRequest
import com.polaris.live.resp.go_resp.ManagerMuteRequest
import com.polaris.live.resp.go_resp.ManagerUnMuteRequest
import com.polaris.live.resp.go_resp.ModifyPasswordBean
import com.polaris.live.resp.go_resp.NullBean
import com.polaris.live.resp.go_resp.OtherUserIdBean
import com.polaris.live.resp.go_resp.QuickLoginBean
import com.polaris.live.resp.go_resp.QuickModifyBean
import com.polaris.live.resp.go_resp.ReceivePartyTaskBean
import com.polaris.live.resp.go_resp.RemarkBean
import com.polaris.live.resp.go_resp.SettingModifyBean
import com.polaris.live.resp.go_resp.SubmitRoomCoverBean
import com.polaris.live.resp.go_resp.TaskActiveReceiveRequest
import com.polaris.live.resp.go_resp.TaskMicRequest
import com.polaris.live.resp.go_resp.TaskReceiveRequest
import com.polaris.live.resp.go_resp.ThirdBindBean
import com.polaris.live.resp.go_resp.UpLoadBackgroundRequest
import com.polaris.live.resp.go_resp.UpLoadImageBean
import com.polaris.live.resp.go_resp.UploadDeviceBean
import com.polaris.live.resp.go_resp.UploadPhotoBean
import com.polaris.live.resp.go_resp.UseConsumableRequest
import com.polaris.live.resp.go_resp.UseDressUpBean
import com.polaris.live.resp.go_resp.UseNumberRequest
import com.polaris.live.resp.go_resp.UserConsumableGiveRequest
import com.polaris.live.resp.go_resp.UserIdRequest
import com.polaris.live.resp.go_resp.UserLoadRoomCoverBean
import com.polaris.live.resp.go_resp.UserPartyBackgroundSaveRequest
import com.polaris.live.resp.go_resp.UserPartyBackgroundUseRequest
import com.polaris.live.resp.go_resp.UserRankAnonymousBean
import com.polaris.live.resp.go_resp.UserRoomThemeUseRequest
import com.polaris.live.resp.go_resp.UserVipColorRequest
import com.polaris.live.resp.go_resp.VerifyBean
import com.polaris.live.resp.go_resp.VipBuyRequest
import com.polaris.live.resp.go_resp.VipInstallRequest
import retrofit2.http.*

/**
 * 网络请求接口
 *
 * @author Created by 半仙 on 2023/7/31/031 16:57
 */
interface UserService {

    /**
     * pre配置接口
     */
    @GET("app/config/pre")
    suspend fun configPre(@QueryMap map: Map<String, @JvmSuppressWildcards Any?>?): ApiResponse<ConfigPreResp>

    /**
     * post配置接口
     */
    @GET("app/config/post")
    suspend fun configPost(@QueryMap map: Map<String, @JvmSuppressWildcards Any?>): ApiResponse<ConfigPostResp>

    /**
     * 设备信息上传
     */
    @POST("adjust/device/info")
    suspend fun uploadDeviceInfo(@Body uploadDeviceBean: UploadDeviceBean): ApiResponse<Any>

    /**
     * 发送验证码接口
     */
    @POST("send-code")
    suspend fun getVerify(@Body verifyBean: VerifyBean): ApiResponse<VerifyResp>

    /**
     * 发送邮箱验证码接口
     */
    @POST("send-code/gmail")
    suspend fun getGmailVerify(@Body verifyBean: VerifyBean): ApiResponse<VerifyResp>

    /**
     * 判断手机号是否已经注册过接口
     */
    @GET("phone/registered")
    suspend fun isRegistered(
        @Query("appType") appType: Int,
        @Query("areaCode") areaCode: String,
        @Query("phoneNumber") phoneNumber: String,
        @Query("uniqueId") uniqueId: String,
    ): ApiResponse<IsRegisteredResp>

    /**
     * 判断邮箱是否已经注册过接口
     */
    @GET("gmail/registered")
    suspend fun isGmailRegistered(
        @Query("appType") appType: Int,
        @Query("gmail") gmail: String,
        @Query("uniqueId") uniqueId: String,
    ): ApiResponse<IsRegisteredResp>

    /**
     * 手机号登录接口
     */
    @POST("login/phone")
    suspend fun loginPhone(@Body loginPhoneBean: LoginPhoneBean): ApiResponse<UserResp>

    /**
     * 邮箱登录接口
     */
    @POST("login/gmail")
    suspend fun loginGmail(@Body loginPhoneBean: LoginPhoneBean): ApiResponse<UserResp>

    /**
     * google登录接口
     */
    @POST("login/google")
    suspend fun loginGoogle(@Body loginPhoneBean: LoginPhoneBean): ApiResponse<UserResp>

    /**
     * facebook登录接口
     */
    @POST("login/facebook")
    suspend fun loginFacebook(@Body loginPhoneBean: LoginPhoneBean): ApiResponse<UserResp>

    /**
     * 设备录接口
     */
    @POST("login/device")
    suspend fun loginDevice(@Body loginPhoneBean: LoginPhoneBean): ApiResponse<UserResp>

    /**
     * 三方绑定
     */
    @POST("third/party/binding")
    suspend fun thirdBind(@Body bean: ThirdBindBean): ApiResponse<Any>

    /**
     * 三方绑定
     */
    @GET("third/party/binding")
    suspend fun getThirdBind(): ApiResponse<List<ThirdBindResp>>

    /**
     * 获取ip对应的国家
     */
    @GET("app/ip/country")
    suspend fun getIp(@Query("uniqueId") uniqueId: String): ApiResponse<IpCountryResp>

    /**
     * 快速登录
     */
    @PUT("login/quick")
    suspend fun quickLogin(@Body quickLoginBean: QuickLoginBean): ApiResponse<UserResp>

    /**
     * 获取更新信息
     */
    @GET("app/update")
    suspend fun updateVersion(): ApiResponse<VersionResp>

    /**
     * 退出登录
     */
    @DELETE("logout")
    suspend fun logout(): ApiResponse<Any>

    /**
     * 获取个人信息
     */
    @GET("info")
    suspend fun getUserData(): ApiResponse<UserResp>

    /**
     * 获取个人归因信息
     */
    @GET("info/traffic-source")
    suspend fun getUserTrafficSource(): ApiResponse<UserTrafficSourceResp>

    /**
     * 完善资料
     */
    @POST("info/modify")
    suspend fun infoModify(@Body infoModifyBean: InfoModifyBean): ApiResponse<Any>

    /**
     * 快速修改个人资料
     */
    @POST("info/modify/quick")
    suspend fun quickModify(@Body quickModifyBean: QuickModifyBean): ApiResponse<Any>

    /**
     * 图片上传
     */
    @GET("app/upload-url")
    suspend fun uploadUrl(
        @Query("fileName") fileName: String,
        @Query("fileType") fileType: Int,
        @Query("length") length: Int,
        @Query("md5") md5: String,
    ): ApiResponse<UploadUrlResp>

    /**
     * 拉黑
     */
    @POST("blacklist")
    suspend fun blockIt(@Body blockItBean: OtherUserIdBean): ApiResponse<Any>

    /**
     * 取消拉黑
     */
    @DELETE("blacklist")
    suspend fun cancelBlack(@Query("otherUserId") otherUserId: Long): ApiResponse<Any>

    /**
     * 获取拉黑列表
     */
    @GET("blacklist")
    suspend fun getBlackList(
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int,
    ): ApiResponse<ListResp<UserBasicVo>>

    /**
     * 获取个人的关注列表
     */
    @GET("followers")
    suspend fun getFollowers(
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int,
    ): ApiResponse<ListResp<UserBasicVo>>

    /**
     * 获取个人的关注列表search
     */
    @GET("followers/search")
    suspend fun getFollowers(
        @Query("searchText") searchText: String?,
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int,
    ): ApiResponse<ListResp<UserBasicVo>>

    /**
     * 获取自己的粉丝列表
     */
    @GET("fans")
    suspend fun getFans(
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int,
    ): ApiResponse<ListResp<UserBasicVo>>

    /**
     * 添加关注
     */
    @POST("follow")
    suspend fun addFollower(@Body blockAndFollowerBean: OtherUserIdBean): ApiResponse<Any>

    /**
     * 喜欢用户
     */
    @POST("like")
    suspend fun addLike(@Body otherUserIdBean: OtherUserIdBean): ApiResponse<Any>

    /**
     * 取消关注
     */
    @DELETE("follow")
    suspend fun deleteFollower(@Query("otherUserId") otherUserId: Long): ApiResponse<Any>

    /**
     * 上传封面照片
     */
    @POST("cover-photos/upload")
    suspend fun upLoadImage(@Body upLoadImageBean: UpLoadImageBean): ApiResponse<UserCoverResp>

    /**
     * 获取用户背景照片
     */
    @GET("cover-photos/photo")
    suspend fun coverPhotos(): ApiResponse<UserCoverResp>

    /**
     * 提交背景照
     */
    @POST("cover-photos/submit")
    suspend fun submitPhotos(@Body nullBean: NullBean): ApiResponse<UserCoverResp>

    /**
     * 获取他人的用户信息
     */
    @GET("info/other")
    suspend fun getInfoOther(
        @Query("otherId") otherId: Long,
        @Query("bitwise") bitwise: Long,
        @Query("fromType") fromType: Int? = null,
    ): ApiResponse<InfoOtherResp>

    /**
     * 批量获取用户信息
     */
    @GET("info/basic")
    suspend fun infoBasic(@Query("userIds") userIds: String): ApiResponse<List<UserBasicVo>>

    /**
     * 批量获取用户状态
     */
    @GET("info/state")
    suspend fun infoState(@Query("userIds") userIds: String): ApiResponse<List<UserState>>

    /**
     * 用户密码登录
     */
    @POST("login/password")
    suspend fun loginByPassword(@Body loginPwdBean: LoginPhoneBean): ApiResponse<UserResp>

    /**
     * 修改密码
     */
    @POST("info/modify/password")
    suspend fun infoModifyPassword(@Body modifyPwdBean: ModifyPasswordBean): ApiResponse<Any>

    /**
     * 获取魅力日排行榜
     */
    @GET("rank/charm/day")
    suspend fun getDayRank(): ApiResponse<UserRankVo>

    /**
     * 获取魅力月排行榜
     */
    @GET("rank/charm/month")
    suspend fun getMonthRank(): ApiResponse<UserRankVo>

    /**
     * 获取财富日排行榜
     */
    @GET("rank/rich/day")
    suspend fun getRichDayRank(): ApiResponse<UserRankVo>

    /**
     * 获取财富月排行榜
     */
    @GET("rank/rich/month")
    suspend fun getRichMonthRank(): ApiResponse<UserRankVo>

    /**
     * 获取游戏收入日排行榜
     */
    @GET("rank/game/day")
    suspend fun getGameDayRank(): ApiResponse<UserRankVo>

    /**
     * 获取游戏收入月排行榜
     */
    @GET("rank/game/month")
    suspend fun getGameMonthRank(): ApiResponse<UserRankVo>

    /**
     * 获取派对游戏收入日排行榜
     */
    @GET("rank/party/game/day")
    suspend fun getPartyGameDayRank(@Query("partyGameType") partyGameType: Int): ApiResponse<UserRankVo>

    /**
     * 获取派对游戏收入月排行榜
     */
    @GET("rank/party/game/month")
    suspend fun getPartyGameMonthRank(@Query("partyGameType") partyGameType: Int): ApiResponse<UserRankVo>

    /**
     * 修改匿名状态
     */
    @PUT("rank/anonymous")
    suspend fun rankAnonymous(@Body request: UserRankAnonymousBean): ApiResponse<Any>

    /**
     * 通过机构邀请码获取公会长信息
     */
    @GET("invite/agency")
    suspend fun getInviter(@Query("agencyCode") agencyCode: String): ApiResponse<UserBasicVo>

    /**
     * 获取邀请自己的用户信息
     */
    @GET("invite/v3")
    suspend fun getInviterUser(@Query("inviteCode") inviteCode: String): ApiResponse<UserBasicVo>

    /**
     * 加入机构
     */
    @POST("invite/v3")
    suspend fun joinInviterAgency(@Body joinInviteAgencyBean: JoinInviteAgencyBean): ApiResponse<UserInviteResp>

    /**
     * 获取自己的公会长的信息
     */
    @GET("invite/agency/owner")
    suspend fun ownerAgency(): ApiResponse<UserBasicVo>

    /**
     * 绑定手机号接口
     */
    @POST("info/bind/phone")
    suspend fun bindPhone(@Body loginPhoneBean: LoginPhoneBean): ApiResponse<Any>

    /**
     * 绑定邮箱接口
     */
    @POST("info/bind/gmail")
    suspend fun bindGmail(@Body loginPhoneBean: LoginPhoneBean): ApiResponse<Any>

    /**
     * 查询壕魅列表
     */
    @GET("richCharm/rule")
    suspend fun getRichCharm(): ApiResponse<RichCharmBean>

    /**
     * 反馈与建议
     */
    @POST("feedbacks")
    suspend fun feedback(@Body feedbackBean: FeedbackBean): ApiResponse<Any>

    /**
     * 账号申诉
     */
    @POST("appeal")
    suspend fun appeal(@Body appealBean: AppealBean): ApiResponse<Any>

    /**
     * 获取收入页面
     */
    @GET("coin/beans")
    suspend fun coinMyBeans(): ApiResponse<CoinBeansResp>

    /**
     * 查询资产明细
     */
    @GET("coin/diamond/detail")
    suspend fun coinDetail(
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int,
        @Query("userCoinDetailSourceType") userCoinDetailSourceType: Int?,
    ): ApiResponse<ListResp<DiamondResp>>

    /**
     * 查询游戏币明细
     */
    @GET("coin/game/detail")
    suspend fun coinGameDetail(
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int,
        @Query("detailType") userCoinDetailSourceType: Int?,
    ): ApiResponse<ListResp<DiamondResp>>

    /**
     * 举报
     */
    @POST("complaint")
    suspend fun complaintIt(@Body complaintBean: ComplaintBean): ApiResponse<Any>

    /**
     * 上传相册
     */
    @POST("photo/album/upload")
    suspend fun uploadPhoto(@Body uploadPhotoBean: UploadPhotoBean): ApiResponse<Any>

    /**
     * 删除相册
     */
    @DELETE("photo/album/remove")
    suspend fun deletePhoto(@Query("photoId") photoId: Int): ApiResponse<Any>

    /**
     * 注销账号
     */
    @DELETE("terminate")
    suspend fun terminate(): ApiResponse<Any>

    /**
     * 获取三个随机昵称
     */
    @GET("three/random/nicknames")
    suspend fun getRandomName(@Query("nickname") nickname: String): ApiResponse<List<RandomNameResp>>

    /**
     * 添加备注
     */
    @POST("remark")
    suspend fun addRemark(@Body remarkBean: RemarkBean): ApiResponse<Any>

    /**
     * 修改备注
     */
    @PUT("remark")
    suspend fun putRemark(@Body remarkBean: RemarkBean): ApiResponse<Any>

    /**
     * 获取喜欢自己的列表
     */
    @GET("likes")
    suspend fun getLikeList(
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int,
    ): ApiResponse<ListResp<UserBasicVo>>

    /**
     * 获取喜欢自己的列表
     */
    @GET("likes/v2")
    suspend fun getLikeList2(
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int,
    ): ApiResponse<ListResp<UserLikesVo>>

    /**
     * 获取通话价格列表
     */
    @GET("app/call/price")
    suspend fun getCallPrice(): ApiResponse<CallPriceResp>

    /**
     * 修改通话价格
     */
    @POST("info/modify/call-price")
    suspend fun modifyCallPrice(@Body chatPriceBean: ChatPriceBean): ApiResponse<Any>

    /**
     * 修改通话价格
     */
    @POST("setting/setting/modify")
    suspend fun settingModify(@Body settingModifyBean: SettingModifyBean): ApiResponse<Any>

    /**
     * 向服务器上传当前的fcm的token
     */
    @POST("push/notice/token")
    suspend fun fcmNoticeToken(@Body bean: FcmNoticeTokenBean): ApiResponse<Any>

    /**
     * 获取动效
     */
    @GET("app/animation")
    suspend fun getAnimation(
        @Query("platformType") platformType: Int = AppConst.PLATFORM_TYPE,
        @Query("buildVersion") buildVersion: Int = AppModule.getAppVersion(),
    ): ApiResponse<List<String>>

    /**
     * 获取主播等级指标
     */
    @GET("info/level")
    suspend fun getIndicator(): ApiResponse<UserRatingIndicatorVo>

    /**
     * 获取用户的背包装饰列表
     */
    @GET("backpack/decorations/v2")
    suspend fun getUserBackpack(): ApiResponse<UserBackpackResp>

    /**
     * 使用装饰
     */
    @PUT("backpack/use-decoration")
    suspend fun useDressUp(@Body useDressUp: UseDressUpBean): ApiResponse<Any>

    /**
     * counType = 1 派对   = 2 游戏
     * @see PartyType
     */
    @GET("room-covers/photo")
    suspend fun getRoomCover(@Query("coverType") coverType: Int): ApiResponse<UserCoverResp>

    /**
     * 上传房间类的背景照
     */
    @POST("room-covers/upload")
    suspend fun uploadRoomCover(@Body userLoadRoomCoverBean: UserLoadRoomCoverBean): ApiResponse<UserCoverResp>

    /**
     * 提交房间类背景照
     */
    @POST("room-covers/submit")
    suspend fun submitRoomCover(@Body submitRoomCoverBean: SubmitRoomCoverBean): ApiResponse<UserCoverResp>

    /**
     * 任务列表
     */
    @GET("task/list")
    suspend fun getTaskList(@Query("pageType") pageType: Int): ApiResponse<UserTaskListResp>

    /**
     * 获取签到列表
     */
    @GET("task/party-game/list")
    suspend fun getTaskParty(@Query("showList") showList: String? = null): ApiResponse<UserPartyGameTaskResp>

    /**
     * 领取派对游戏任务奖励
     */
    @POST("task/party-game/reward")
    suspend fun receivePartyTask(@Body receiveBean: ReceivePartyTaskBean): ApiResponse<UserPartyGameTaskResp>

    /**
     * 上传背景照预检查
     */
    @GET("cover-photos/upload/pre")
    suspend fun coverPhotosUpload(): ApiResponse<Any>

    /**
     * 主持人，邀请者的列表 邀请我的人的列表
     */
    @GET("invite/list")
    suspend fun getInviteList(): ApiResponse<List<UserInviteHostListResp>>

    /**
     * 嘉宾，被邀请者的列表 我邀请的人的列表
     */
    @GET("invite/be/list")
    suspend fun getInviteBeList(
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int,
    ): ApiResponse<ListResp<ListResultUserInviteGuestResp>>

    /**
     * 嘉宾，被邀请者的列表 我邀请的人的列表
     */
    @GET("invite/be/rewards")
    suspend fun getInviteBeRewards(
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int,
    ): ApiResponse<ListResp<ListResultUserInviteRewardResp>>

    /**
     * 获取派对游戏积分明细
     */
    @GET("score/party-game/list")
    suspend fun scorePartyGameList(): ApiResponse<List<UserScorePartyGameResp>>

    /**
     * 查询勋章墙
     */
    @GET("medals")
    suspend fun userMedals(@Query("userId") userId: Long): ApiResponse<UserMedalAllResp>

    /**
     * 获取用户的背包礼物列表
     * 礼物来源类型
     *
     * 0: 私聊
     * 1: 直播间
     * 2: 通话
     * 3: 派对
     * 4: 游戏
     */
    @GET("backpack/gifts/v2")
    suspend fun backpackGifts(@Query("sourceType") sourceType: Int): ApiResponse<List<UserBackpackGiftResp>>

    /**
     *getRank
     * 榜单类型 1-日榜 7-周榜 30-月榜
     */
    @GET("contribution/rank")
    suspend fun getRank(
        @Query("anchorId") anchorId: Long,
        @Query("rankType") rankType: Int,
        @Query("last") last: Boolean,
    ): ApiResponse<UserContributionRank>

    /**
     *获取贡献者
     */
    @GET("contribution/user")
    suspend fun getRankUser(
        @Query("userId") userId: Long,
    ): ApiResponse<List<Rank>>

    /**
     *是否有新的背包礼物
     */
    @GET("backpack/gift/new")
    suspend fun getHaveNewBackpack(): ApiResponse<Boolean>

    /**
     *是否有新的背包礼物
     */
    @PUT("backpack/gift/new")
    suspend fun putHaveNewBackpack(@Body map: Map<String, String>): ApiResponse<Any>

    /**
     * 获取公会成员指标列表
     */
    @GET("agency/member/indicators")
    suspend fun getAgencyUser(
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int,
    ): ApiResponse<ListResp<AgencyMemberIndicatorResp>>

    /**
     * 搜索公会成员指标
     */
    @GET("agency/member/indicators/search")
    suspend fun searchAgencyUser(
        @Query("searchText") searchText: String,
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int,
    ): ApiResponse<ListResp<AgencyMemberIndicatorResp>>

    /**
     * 根据类型获取背包装饰列表
     */
    @GET("backpack/decoration/type")
    suspend fun getUserBackpackByType(
        @Query("decorationType") decorationType: Int,
        @Query("available") available: Int,
    ): ApiResponse<List<UserBackpackDecorationResp>>

    /**
     * 获取用户的背包接收列表
     */
    @GET("backpack/receives")
    suspend fun backpackReceives(
        @Query("backpackId") backpackId: Int?,
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int,
    ): ApiResponse<ListResp<BackpackReceivesResp>>

    /**
     * 查了过背包装饰
     */
    @PUT("backpack/backpack/new")
    suspend fun putBackpackNew(@Body request: BackPackRedRequest): ApiResponse<Any>

    /**
     * 获取用户的道具列表
     */
    @GET("backpack/consumable/list")
    suspend fun getConsumableList(): ApiResponse<List<UserBackpackConsumableResp>>

    /**
     * 按分类获取用户的道具列表
     */
    @GET("backpack/consumable/list/by/type")
    suspend fun getConsumableListType(@Query("consumableTypes") consumableTypes: String): ApiResponse<UserBackpackToolListResp>

    /**
     * 使用道具
     */
    @PUT("backpack/consumable/use")
    suspend fun useConsumable(@Body request: UseConsumableRequest): ApiResponse<UseConsumableResp>

    /**
     * 获取用户的道具列表 红点
     */
    @GET("backpack/backpack/new/all")
    suspend fun getBackpackNewAll(): ApiResponse<UserBackpackNewAllResp>

    /**
     * 是否有新的背包装饰或者道具
     */
    @GET("backpack/backpack/new")
    suspend fun getBackpackNew(
        @Query("backpackType") backpackType: Int?,
        @Query("decorationType") decorationType: Int?,
    ): ApiResponse<Boolean>

    /**
     * 领取道具每日奖励  聚合
     */
    @POST("backpack/consumable/receive/daily-reward/v2")
    suspend fun consumableReceive(@Body request: UserIdRequest): ApiResponse<List<UserConsumableRewardV2Resp>>

    /**
     * 给运营用的搜索接口
     */
    @GET("info/other/number")
    suspend fun getSearchUser(@Query("userNumber") userNumber: Long): ApiResponse<UserBasicVo>

    /**
     * 查询壕魅列表v2
     */
    @GET("richCharm/v2/rule")
    suspend fun getRichCharmV2(): ApiResponse<UserRichCharmConfigsResp>

    /**
     * 获取用户的number列表
     */
    @GET("number/list")
    suspend fun getNumberList(): ApiResponse<List<UserBackpackNumberResp>>

    /**
     * 使用number
     */
    @POST("number/use")
    suspend fun useNumber(@Body request: UseNumberRequest): ApiResponse<Any>

    /**
     * 用户邀请-获取邀请码
     */
    @GET("invite/inviter/code")
    suspend fun getInviteCode(): ApiResponse<UserInviterCodeResp>

    /**
     * 获取他人的用户信息-无限制
     */
    @GET("info/other/number/all")
    suspend fun getInfoOtherAll(@Query("userNumber") userNumber: Long): ApiResponse<List<UserBasicVo>>

    /**
     * 客服信息
     */
    @GET("customer-service/info")
    suspend fun customerService(): ApiResponse<UserCustomerServiceResp>

    /**
     * 客服红点
     */
    @GET("customer-service/message/unread")
    suspend fun customerServiceUnread(): ApiResponse<CustomerMessageUnreadResp>

    /**
     * 任务列表v2
     */
    @GET("task/list/v2")
    suspend fun getTaskV2(): ApiResponse<UserTaskListV2Resp>

    /**
     * v2任务领取
     */
    @POST("task/receive")
    suspend fun taskReceive(@Body request: TaskReceiveRequest): ApiResponse<UserTaskReceiveRewardResp>

    /**
     * 用户上麦声音上报
     *
     *  config配置为taskMicAudioReportInterval默认为5秒
     */
    @POST("task/mic-audio/report")
    suspend fun taskMicReport(@Body request: TaskMicRequest): ApiResponse<Any>

    /**
     * 是否有新的可领取奖励
     */
    @GET("task/new")
    suspend fun getTaskNew(): ApiResponse<Boolean>

    /**
     * 领取活跃奖励
     */
    @POST("task/active/receive")
    suspend fun taskActiveReceive(@Body request: TaskActiveReceiveRequest): ApiResponse<UserTaskReceiveRewardResp>

    /**
     * 免费礼物
     */
    @GET("free-gift/info")
    suspend fun freeGiftInfo(@Query("giftSourceType") giftSourceType: Int): ApiResponse<UserFreeGiftResp>

    /**
     * 获取用户自己的余额信息
     */
    @GET("info/account")
    suspend fun getUserAccount(): ApiResponse<UserTaskReceiveRewardResp>

    /**
     * 自定义派对背景列表
     */
    @GET("party/background")
    suspend fun getPartyDiyBackground(): ApiResponse<UserPartyBackgroundListResp>

    /**
     * 上传派对背景
     */
    @POST("party/background/upload")
    suspend fun partyBackgroundUpload(@Body request: UpLoadBackgroundRequest): ApiResponse<Any>

    /**
     * vip中心
     */
    @GET("vip/center")
    suspend fun getVipCenter(): ApiResponse<UserVipCenterResp>

    /**
     * 购买vip
     */
    @POST("vip/buy")
    suspend fun vipBuy(@Body request: VipBuyRequest): ApiResponse<Any>

    /**
     * 安装vip装扮
     */
    @POST("vip/install")
    suspend fun vipInstall(@Body request: VipInstallRequest): ApiResponse<Any>

    /**
     * vip明细
     */
    @GET("vip/detail")
    suspend fun getVipDetail(
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int,
    ): ApiResponse<ListResp<UserVipDetailResp>>

    /**
     * 购买自定义派对位置
     */
    @POST("party/background/buy")
    suspend fun buyPartyBackground(@Body request: BuyBackgroundRequest): ApiResponse<Any>

    /**
     * 房间主题列表
     */
    @GET("room/theme")
    suspend fun getRoomTheme(): ApiResponse<UserRoomThemeListResp>

    /**
     * 使用房间主题
     */
    @PUT("room/theme/use")
    suspend fun useRoomTheme(@Body request: UserRoomThemeUseRequest): ApiResponse<Any>

    /**
     * 使用自定义派对位置
     */
    @PUT("party/background/use")
    suspend fun usePartyBackground(@Body request: UserPartyBackgroundUseRequest): ApiResponse<Any>

    /**
     * 赠送道具
     */
    @PUT("backpack/consumable/give")
    suspend fun giveTool(@Body request: UserConsumableGiveRequest): ApiResponse<UserConsumableGiveVo>

    /**
     * 获取用户弹幕卡信息
     */
    @GET("backpack/consumable/barrage/number")
    suspend fun getBarrageNumber(): ApiResponse<UserBackpackBarrageNumberResp>

    /**
     * 保存派对背景
     */
    @POST("party/background/save")
    suspend fun partyBackgroundSave(@Body request: UserPartyBackgroundSaveRequest): ApiResponse<Any>

    /**
     * 使用VIP昵称颜色
     */
    @POST("vip/nickname/color/use")
    suspend fun useColor(@Body request: UserVipColorRequest): ApiResponse<Any>


    /**
     * 用户禁言操作选项
     */
    @GET("manager/mute/options")
    suspend fun managerMuteOptions(): ApiResponse<UserMuteOptionsResp>

    /**
     * 用户封禁操作选项
     */
    @GET("manager/ban/options")
    suspend fun managerBanOptions(): ApiResponse<UserBanOptionsResp>

    /**
     * 取消禁言
     */
    @POST("manager/un-mute")
    suspend fun managerUnMute(@Body request: ManagerUnMuteRequest): ApiResponse<Any>

    /**
     * 禁言
     */
    @POST("manager/mute")
    suspend fun managerMute(@Body request: ManagerMuteRequest): ApiResponse<Any>

    /**
     * 解封用户
     */
    @POST("manager/un-ban")
    suspend fun managerUnBan(@Body request: ManagerUnMuteRequest): ApiResponse<Any>

    /**
     * 封禁用户
     */
    @POST("manager/ban")
    suspend fun managerBan(@Body request: ManagerBanRequest): ApiResponse<Any>
}